home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Mac Magazin/MacEasy 2
/
Mac Magazin and MacEasy Magazine CD - Issue 02.iso
/
Sharewarebibliothek
/
Applikationen
/
Alpha.5.81 folder
/
Tcl
/
SystemCode
/
modes.tcl
< prev
next >
Wrap
Text File
|
1994-06-14
|
7KB
|
315 lines
set localVars { optionIsMeta wordBreak wordBreakPreface wordWrap
fillColumn leftFillColumn tabSize elecLBrace elecRBrace electricSemi
prefixString suffixString funcExpr funcPar sortedIsDefault
markSorting }
set allModeMenus { thinkMenu cwarrierMenu toolserverMenu
texMenu thinkRefMenu oztexMenu
texturesMenu tclMenu perlMenu }
set modeMenus(C) { thinkMenu cwarrierMenu thinkRefMenu }
set modeMenus(C++) { thinkMenu cwarrierMenu thinkRefMenu }
set modeMenus(TeX) { texMenu texturesMenu }
set modeMenus(Text) { perlMenu }
set modeMenus(Fort) { }
set modeMenus(Tcl) { tclMenu }
set modeMenus(MPW) { }
set modeMenus(Csh) { tclMenu }
set modeMenus(BRWZ) { }
# 'modes' is inspected by alpha for the popup mode menu. 'newMode' is
# called by Alpha in case of a successful choice.
set modes { C C++ Csh Fort MPW Tcl TeX Text }
set modeProcs(C) setCMode
set modeProcs(C++) setC++Mode
set modeProcs(Csh) setShellMode
set modeProcs(Fort) setFortranMode
set modeProcs(MPW) setMPWMode
set modeProcs(Tcl) setTclMode
set modeProcs(TeX) setTexMode
set modeProcs(Text) setTextMode
set lastMode 0
#================================================================================
proc setWinMode name {
global winModes
set nm [file tail $name]
if {[set first [string last " <" $name]] >= 0} {
set rname [string range $name 0 [expr $first - 1]]
} else {
set rname $name
}
case $rname in {
"*.c" { set winModes($name) setCMode }
"*.tex" { set winModes($name) setTexMode; winFuncTitle $nm "Sect" }
"*.cc" { set winModes($name) setC++Mode; winFuncTitle $nm "Meth" }
"*.cp" { set winModes($name) setC++Mode; winFuncTitle $nm "Meth" }
"*.C" { set winModes($name) setC++Mode; winFuncTitle $nm "Meth" }
"*.h" { set winModes($name) setCMode }
"*.f" { set winModes($name) setFortranMode }
"*.tcl" { set winModes($name) setTclMode; winFuncTitle $nm "Proc" }
{*Toolserver\ sh*} { set winModes($name) setMPWMode; winFuncTitle $nm "Proc" }
{*tcl\ sh*} { set winModes($name) setShellMode; winFuncTitle $nm "Proc" }
"*.sty" { set winModes($name) setTexMode; winFuncTitle $nm "Sect" }
"Browser" { set winModes($name) setBrowseMode }
default { set winModes($name) setTextMode }
}
}
proc newMode mode {
global winModes
global modeProcs
set name [lindex [winNames -f] 0]
$modeProcs($mode)
set winModes($name) $modeProcs($mode)
}
proc deactivateHook name {
}
proc suspendHook name {
global iconifyOnSwitch
global suspIconed
if {$iconifyOnSwitch} {
set wins [winNames -f]
foreach win $wins {
if {![icon -f "$win" -q]} {
set suspIconed($win) 1
icon -f "$win" -t
}
}
}
}
proc resumeHook name {
global iconifyOnSwitch resumeRevert suspIconed
if {$iconifyOnSwitch && [info exists suspIconed]} {
set wins [winNames -f]
foreach win [array names suspIconed] {
icon -f "$win" -o
}
unset suspIconed
}
if {$resumeRevert} {
set resumeRevert 0
revert
}
}
# Called prior to Alpha calling 'MenuSelect'. Redefined in 'flags.tcl'.
proc menuHook {} {
}
# Handles dynamically adding and deleting window names from menu.
proc addWinName name {
global winNameToNum winMenu winNumToName fullNames
for {set i 0} {$i<100} {incr i} {
if {[catch {set nm $winNumToName($i)} res] == "1"} {
if {$fullNames != "0"} {
set nm $name
} else {
regexp {[^:]*$} $name nm
}
if {$i < 10} {
addMenuItem -m -l "/$i" $winMenu $nm
} else {
addMenuItem -m -l "" $winMenu $nm
}
set winNumToName($i) $name
set winNameToNum($name) $i
return
}
}
}
proc removeWinName name {
global winNameToNum winNumToName fullNames winMenu
set num $winNameToNum($name)
unset winNumToName($num)
unset winNameToNum($name)
if {$fullNames == "1"} {
deleteMenuItem -m $winMenu $name
} else {
regexp {[^:]*$} $name nm
deleteMenuItem -m $winMenu $nm
}
}
proc menuWin {menu name} {
global winNameToNum
set nms [array names winNameToNum]
foreach nm $nms {
if {[string match *$name $nm] == "1"} {
bringToFront $name
if [icon -q] { icon -f $name -o }
return
}
}
return "normal"
}
proc changeMode {newMode} {
global lastMode savedIsMeta wordBreak wordBreakPreface optionIsMeta modeMenus
catch {displayMode $newMode}
if {$lastMode == $newMode} return
if { $lastMode == "TeX" } {
set optionIsMeta $savedIsMeta
set wordBreakPreface {[^a-zA-Z0-9_]}
set wordBreak {[a-zA-Z0-9_]+}
set optionIsMeta 1
}
if {[info exists modeMenus($lastMode)]} {
foreach m $modeMenus($lastMode) {
global $m
catch {removeMenu [set $m]}
}
}
global mode
set mode $newMode
set lastMode $newMode
if {[info exists modeMenus($lastMode)]} {
foreach m $modeMenus($lastMode) {
global $m
catch {insertMenu [set $m]}
}
}
}
proc setModeMenus {} {
global mode modeMenus allModeMenus
set menus [listpick -p "Select (using shift) menus for mode '$mode':" -l [lsort $allModeMenus]]
if {![llength $menus]} return
set modeMenus($mode) $menus
addUserLine "set modeMenus($mode) \{ $menus \}"
foreach m $allModeMenus {
global $m
catch {removeMenu [set $m]}
}
foreach m $menus {
global $m
catch {insertMenu [set $m]}
}
}
# Modes
# Fortran programming mode
proc setFortranMode {} {
changeMode "Fort"
uplevel #0 {
set elecLBrace 0
set elecRBrace 0
set electricSemi 0
set wordWrap 0
set funcExpr {^( |\t)(subroutine|.*function|SUBROUTINE|.*FUNCTION).*\(.*$}
set sortedIsDefault 0
}
}
# Ordinary, default mode
proc setTextMode {} {
changeMode "Text"
uplevel #0 {
set elecLBrace 0
set elecRBrace 0
set electricSemi 0
set wordWrap 1
set prefixString "> "
set suffixString " <--"
}
}
#=============================================================================
# Hook procs recognized: "openHook", "closeHook", "activateHook", "deactivateHook",
# "suspendHook", "saveasHook", "saveHook", and "resumeHook".
#=============================================================================
# Event hooks - set specific modes when files opened.
proc openHook name {
global winModes
$winModes($name)
if {$name == {*Toolserver shell*}} startMPW
addWinName $name
}
# full pathname
proc saveHook name {
global backup backExtension backDir
if {![string length [set dir $backDir]]} {
set dir [file dirname $name]
}
if ($backup) {
catch {rm $dir:[file tail $name]~}
cp $name $dir:[file tail $name]$backExtension
}
}
# Clean up the mark stack.
proc closeHook name {
global markStack
global winModes
unset winModes($name)
if [llength $markStack] {
set markStack [removePat $markStack $name*]
}
removeWinName $name
}
proc saveasHook {oldName newName} {
global winModes
removeWinName $oldName
addWinName $newName
setWinMode $newName
$winModes($newName)
}
proc activateHook name {
global winModes
if {[catch {$winModes($name)}]} {
setWinMode $name
$winModes($name)
}
}
proc dirtyHook {name dirty} {
global winMenu
markMenuItem $winMenu [file tail $name] $dirty "◊"
}